prompt 预交金账户退款接口(统一支付平台) create or replace procedure SP_PAY_YJJ_ZHTK ( IN_OPERETORID in varchar2 ,--char(30) N 操作员编号 IN_OPERETORNAME in varchar2 ,--char(50) N 操作员姓名 IN_TERMNO in varchar2 ,--char(32) Y 终端编号 IN_CARDTYPE in varchar2 ,--char(2) N 卡类型 01:社保卡 02:市民健康卡 03:院内就诊卡 04:身份证 05:住院号 06:临时卡 07:腕带编码 08:病案号加身份证 09:住ID 10:病人ID IN_CARDNO in varchar2 ,--char(32) N 卡号 IN_ACCOUNTTYPE in varchar2 ,--char(2) N 帐户类型 01:门诊预交金账户 02:住院预交金账户 IN_IDNO in varchar2 ,--char(32) Y 身份证号 IN_WITHDRAWTYPE in varchar2 ,--char(2) N 转出类型 01 现金 02 POS刷卡 03 单位转账 04 支付宝 05 微信支付 06 健康通支付 07 离线POS 08:建行龙支付 IN_AMOUNT in number ,--number(12,2) N 充值金额 保留两位小数 IN_OUTRECHARGENO in varchar2 ,--char(32) N 外部充值交易流水号 HIS或自助机(退款交易类型为02,03,04 传his原订单号) IN_RECHARGENO in varchar2 ,--char(32) N 支付平台充值流水号 支付平台业务流水号 IN_EXTERNALNO in varchar2 ,--char(64) Y 支付渠道流水号 支付宝、微信等平台流水号 IN_POSTRANS in varchar2 ,--char(1024) Y POS刷卡信息 JSON格式字符串 IN_NOTES in varchar2 ,--char(256) Y 备注信息 IN_TKJYLX in varchar2 ,--退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 OUT_RETCODE out varchar2 ,--返回码 00成功 OUT_RETMSG out varchar2 ,--返回说明 OUT_BALANCE out number ,--余额 OUT_TRACETIME out varchar2 ,--交易成功时间 yyyyMMddHHmmss OUT_TRACENO out varchar2 --HIS处理业务流水号 ) as -- MODIFICATION HISTORY -- Person Date Comments --zhangyc 2017.09.13 created by MZSF-20170913-001 --zhangyc 2017.09.14 返回时间改为缴费时间 by MZSF-20170913-003 --zhangyc 2017.09.30 微信或支付宝支付修改 by MZSF-20171010-001 --zhangyc 2017.10.12 微信或支付修正 by MZSF-20171012-002 --zhangyc 2017.10.18 统一支付修正 by MZSF-20171018-002 --zhangyc 2017.10.26 修正WBHLID、WBHLJE 写入错误 by MZSF-20171027-002 --zhangyc 2017.11.04 增加写入BM_ZFPTCS by MZSF-20171107-001 --zhangyc 2017.11.09 修正退款缴费备注错误 by MZSF-20171109-006 --zhangyc 2017.11.13 增加住院功能 by ZYSF-20171114-001 --zhangyc 2017.11.21 增加出院结算退款 by ZYSF-20171123-002 --zhangyc 2017.11.30 注释掉金额为0 的限制 by ZYSF-20171130-002 --zhangyc 2017.12.11 修正出院结算退款不插入票据表以及票据号取结账表 by ZYSF-20171214-001 --zhangyc 2017.12.14 增加参数控制是否本地模拟交易 by ZYSF-20171214-003 --zhangyc 2017.12.28 修正退款冲正票据使用情况表金额错误问题 by MZSF-20171228-003 --zhangyc 2018.01.08 修正出院结算退款时间改为结账表日期和时间 by ZYSF-20180109-001 --zhangyc 2018.03.05 代码整合 by ZYSF-20180302-001 --zhangyc 2018.04.12 修正SF_PJWLYBNSY=Y and SF_YJJPJ0=Y and SF_YJJTKPJLX=N报错 by MZSF-20180416-003 --zhangyc 2018.06.15 增加ZFMXBM by MZSF-20180619-001 --zhangyc 2018.08.16 修改bug by ZYSF-20180816-001 --zhangyc 2018.08.16 增加退转账功能 by ZYSF-20180703-003 --zhangyc 2018.08.20 修改票据号重复限制 by ZYSF-20180820-001 --zhangyc 2018.10.22 增加执行SP_SF_PAY_POSLSZ过程 by MZSF-20181023-004 --zhuyr 2018.11.05 增加重新结算相关内容 by ZYSF-20180528-001 --zhuyr 2018.11.19 在写入住院退款记录时,增加写入ZYID00内容 by ZYSF-20181113-001 --zhangyc 2019.01.22 增加预交金退款微信或支付宝转现金退出LS_WITHDRAWMODE=1 错误 by ZYSF-20190122-001 --qiulf 2020.04.17 退现金记录缴费表TKJE00 by MZSF-20200227-003 --zhangyc 2021.06.07 解析app_id|app_name|银行编号 by MZSF-20210607-004 --zhangyc 2021.07.23 查询表BM_ZFRZ00增加条件 JFBZ00='1'以及优先IN_outrechargeno取值不到用IN_rechargeno by MZSF-20210726-001 --zhangyc 2022.06.22 增加写入SP_PJSYQK.PHLYXZ(根据入参数IN_CHANNELTYPE跟通用字典名称='易惠支付渠道类型(channeltype)票据限制') by MZSF-20220623-001 --zhangyc 2023.05.18 JKLXBH=43:出院结算院内先退款 and TKJYLX=01:退款交易类型 01:正常退款 直接返回成功,不执行下面业务 by ZYSF-20230522-003 --zhangyc 2024.09.14 调用过程SF_SF_PAY_DDLSH0增加入参PJFBZ00(缴费备注:0:交,1:退) by MZSF-20240927-003 --zhangyc 2024.11.12 修正IN_TKJYLX=03,支付方式=8银行卡时接口报错“该笔交易已经退款成功,无法重复查找!” LS_JKLXBH number(5); LS_COUNT0 number(10); LS_COUNT1 number(10); LS_BRID00 number(10); LS_ZYID00 number(10); LS_ZYH000 varchar2(12); LS_JZDH00 number(10); LS_ZHYE00 number(12,2); LS_JYJE00 number(12,2);--交易金额 LS_XJJE00 number(12,2); --现金金额 LS_ZZJE00 number(12,2); --转账金额 LS_YHKJE0 number(12,2); --银行卡金额 LS_CZRQ00 varchar2(8); LS_CZSJ00 varchar2(8); LS_JFBZ00 varchar2(1);--交费备注 '0'交 1:退 LS_CZLXBM varchar2(10);--充值类型 LS_CZLXMC varchar2(20);--充值名称 LS_DJH000 SF_BRJFB0.DJH000%type; LS_PJH000 SF_BRJFB0.PJH000%type; LS_ZFFSBH SF_BRJFB0.ZFFS00%type; LS_PTZFBH SF_BRJFB0.ZFFS00%type; LS_ZFFSMC BM_BRZFFS.ZFFSMC%type; LS_ZPH000 SF_BRJFB0.ZPH000%type; LS_ZPZH00 SF_BRJFB0.ZPZH00%type; LS_ZPKHYH SF_BRJFB0.ZPKHYH%type; LS_ZPDWMC SF_BRJFB0.ZPDWMC%type; LS_JYLSH0 SF_BRJFB0.JYLSH0%type;--交易流水号 LS_YKTSH0 SF_BRJFB0.YKTSH0%type;--健康通流水号 LS_JYLXMC SF_BRJFB0.JYLXMC%type;--交易类型名称 LS_JGBM00 SF_BRJFB0.JGBM00%type;--机构编码 LS_JGMC00 SF_BRJFB0.JGMC00%type;--机构名称 LS_DDLSH0 SF_BRJFB0.DDLSH0%type;--订单流水号 LS_YGBH00 BM_YGBM00.YGBH00%type; --操作员编号 LS_YGXM00 BM_YGBM00.ZWXM00%type; --操作员姓名 LS_CZYKS0 BM_YGBM00.BMBH00%type; LS_PJXH00 SF_PJSYQK.PJXH00%type; LS_PJLYID BM_PJLYQK.PJLYID%type; LS_PJLXBM BM_PJLYQK.PJLXBM%type; LS_PLBH00 BM_PJLYQK.PJLXBM%type; LS_JFLBID BM_BRJFLB.JFLBID%type; LS_JFYY00 ZY_BRJFB0.JFYY00%type; LS_JFSHR0 ZY_BRJFB0.JFSHR0%type; LS_JFSHSJ ZY_BRJFB0.JFSHSJ%type; LS_DJHORD ZY_BRJFB0.DJH000%type; LS_XJYE00 number(12,2); LS_ZYE000 number(12,2); LS_DDLSH0_NEW SF_BRJFB0.DDLSH0%type;--订单流水号 LS_MZZYBZ char(1); --门诊住院标志 0:门诊 1:住院 LS_TKDDH0 varchar2(50); --原退款订单流水号 RBRXX BM_BRXXB0%rowtype; RZYXX ZY_BRXXB0%rowtype; RZFRZ BM_ZFRZ00%rowtype; LS_YJJPJ0 char(4); --预交金票据与预交金退一样 LS_PLBHCS char(4); LS_BZ0000 varchar2(200); LS_INQTCS BM_ZFRZ00.INQTCS%type; LS_TKJYLX varchar2(20); LS_PTZFMC varchar2(30); LS_MKLXMC varchar2(20); LS_JFDJH0 number(12); LS_CYTKCZFS number(5);--出院结算微信或支付宝退款冲正支付方式 默认:1 现金 LS_JKXYBM BM_ZFRZ00.JKXYBM%type; LS_MLZFCS BM_TYZD00.MC0000%type; LS_SFTJSW varchar2(20); --是否提交事务 Y:是 N:否 LS_JZRQ00 ZY_JZB000.JZRQ00%type; LS_JZSJ00 ZY_JZB000.JZSJ00%type; LS_JFRQ00 ZY_BRJFB0.JFRQ00%type; LS_JFSJ00 ZY_BRJFB0.JFSJ00%type; LS_ZFQDBM BM_ZFRZ00.JGBM00%type;--支付渠道编码(YHZF:易惠支付 YLZF:医联支付 LKWL:联空网络 QYYJJ:区域预交金) LS_ZFMXBH BM_ZFFSMX.ZFMXBH%type;--支付明细编码H:现金I:转账J:POS离线K:POS刷卡L:龙支付M:银联二维码D:微信离线E:微信扫码F:支付宝离线G:支付宝扫码A:榕医通B:聚合支付C:健康通N:银医通P:一卡通 LS_SHH000 SF_BRJFB0.SHH000%type; LS_XJDJH0 ZY_BRJFB0.DJH000%type; LS_XJTZZ0 char(1);--是否现金退转账 Y:是 N:否 LS_ZXZT00 varchar2(20);--输出:执行状态 0:失败 1:成功 LS_ERRMSG varchar2(400);--输出:错误信息 LS_ZXZTTK number; LS_APPBM0 SF_BRJFB0.APPBM0%type;--App 编码 LS_APPMC0 SF_BRJFB0.APPMC0%type;--App名称 LS_APPYH0 SF_BRJFB0.APPYH0%type;--App银行 LS_TEMPNUM number(12,2); LS_PHLYXZ SF_PJSYQK.PHLYXZ%type; --票据领用限制 N:不限制 Y或null:限制 LS_JKRZID BM_JKRZ00.JKRZID%type;--日志表ID LS_JKQQLX BM_JKRZ00.JKQQLX%type;--接口请求类型 LS_FUNCBM BM_JKRZ00.FUNCBM%type;--接口编码 LS_FUNCMC BM_JKRZ00.FUNCMC%type;--接口方法 LS_JKQQCS BM_JKRZ00.JKQQCS%type;--接口请求参数 LS_JKFHCS BM_JKRZ00.JKFHCS%type;--返回参数值 LS_BYCS01 BM_JKRZ00.BYCS01%type;--备用参数1 LS_BYCS02 BM_JKRZ00.BYCS02%type;--备用参数2 LS_BYCS03 BM_JKRZ00.BYCS03%type;--备用参数3 begin /* LS_BZ0000:=substrb(IN_OPERETORID||'|'||IN_OPERETORNAME||'|'||IN_TERMNO||'|'||IN_CARDTYPE||'|'||IN_CARDNO||'|'||IN_ACCOUNTTYPE ||'|'||IN_IDNO||'|'||IN_WITHDRAWTYPE||'|'||IN_AMOUNT||'|'||IN_OUTRECHARGENO||'|'||IN_RECHARGENO||'|'||IN_EXTERNALNO||'|'||IN_TKJYLX,1,200); */ LS_COUNT0:=0; LS_COUNT1:=0; LS_XJTZZ0:='N';--是否现金退转账 Y:是 N:否 LS_CYTKCZFS:=0; LS_JZDH00:=0; LS_BRID00:=0; LS_CZRQ00:=to_char(sysdate,'YYYYMMDD'); LS_CZSJ00:=to_char(sysdate,'HH24:MI:ss'); LS_JFRQ00:=LS_CZRQ00; LS_JFSJ00:=LS_CZSJ00; LS_MKLXMC:='预交金退款'; LS_JFDJH0:=0; OUT_RETCODE:='99';--出参: 返回码 00成功 LS_JFBZ00:='1';--交费备注 '0'交 1:退 LS_SFTJSW:='Y'; --是否提交事务 Y:是 N:否 LS_JYJE00:=-abs(nvl(IN_AMOUNT,0)); LS_DDLSH0:=IN_OUTRECHARGENO;--订单流水号(外部充值交易流水号 HIS或自助机) LS_JYLSH0:=IN_RECHARGENO;--交易流水号(支付平台充值流水号 支付平台业务流水号) LS_YKTSH0:=IN_EXTERNALNO;--(支付渠道流水号 支付宝、微信等平台流水号) LS_CZLXBM:=substrb(trim(IN_WITHDRAWTYPE),1,10);--转出类型 转出类型 01 现金 02 POS刷卡 03 单位转账 04 支付宝 05 微信支付 06 健康通支付 07 离线POS LS_ZPZH00:=trim(IN_TERMNO); LS_TKJYLX:=nvl(IN_TKJYLX,'01');--退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_BZ0000:=trim(IN_NOTES);--备注信息 LS_ZFQDBM:='YHPAY'; LS_SHH000:='YHPAY'; LS_APPBM0:=null;--App 编码 LS_APPMC0:=null;--App名称 LS_APPYH0:=null;--App银行 LS_TEMPNUM:=0; LS_PHLYXZ:='Y'; --票据领用限制 N:不限制 Y或null:限制 if IN_ACCOUNTTYPE='01' then --N 帐户类型 01:门诊预交金账户 02:住院预交金账户 LS_MZZYBZ:='0'; --门诊住院标志 0:门诊 1:住院 else LS_MZZYBZ:='1'; --门诊住院标志 0:门诊 1:住院 end if; --转出类型 01 现金 02 POS刷卡 03 单位转账 04 支付宝 05 微信支付 06 健康通支付 07 离线POS 08:建行龙支付 if trim(LS_CZLXBM)='01' then --机构名称 LS_CZLXMC:='现金'; elsif trim(LS_CZLXBM)='02' then LS_CZLXMC:='POS刷卡'; elsif trim(LS_CZLXBM)='03' then LS_CZLXMC:='单位转账'; elsif trim(LS_CZLXBM)='04' then LS_CZLXMC:='支付宝'; elsif trim(LS_CZLXBM)='05' then LS_CZLXMC:='微信'; elsif trim(LS_CZLXBM)='06' then LS_CZLXMC:='健康通'; elsif trim(LS_CZLXBM)='07' then LS_CZLXMC:='离线POS'; elsif trim(LS_CZLXBM)='08' then LS_CZLXMC:='建行龙支付'; elsif trim(LS_CZLXBM)='09' then LS_CZLXMC:='聚合支付'; else LS_CZLXMC:=''; end if; select SF_SF_PAY_JYLXBH(LS_JFBZ00,LS_CZLXBM,LS_ZFQDBM) into LS_PTZFBH from dual; begin select ZFFSMC into LS_PTZFMC from BM_BRZFFS where ZFFSBH=LS_PTZFBH; exception when others then LS_PTZFMC:='银行卡'; end; --支付明细编码H:现金I:转账J:POS离线K:POS刷卡L:龙支付M:银联二维码D:微信离线E:微信扫码F:支付宝离线G:支付宝扫码A:榕医通B:聚合支付C:健康通N:银医通P:一卡通 begin select substrb(SF_SF_ZFMXBH(LS_PTZFBH,LS_ZFQDBM,trim(LS_CZLXBM)),1,2) into LS_ZFMXBH from dual; exception when others then LS_ZFMXBH:=null; end; begin if LS_MZZYBZ='0' then --门诊住院标志 0:门诊 1:住院 select trim(SF_SF_TYZD00('支付统一平台参数','MZMLZFFS')) into LS_MLZFCS from dual; else select trim(SF_SF_TYZD00('支付统一平台参数','ZYMLZFFS')) into LS_MLZFCS from dual; end if; exception when others then LS_MLZFCS:='0'; end; if LS_MLZFCS is not null and LS_MLZFCS not in ('0') and trim(IN_RECHARGENO) is null and trim(IN_TERMNO) is null and instrb(','||LS_MLZFCS||',',','||LS_PTZFBH||',')>0 then LS_SFTJSW:='N'; --是否提交事务 Y:是 N:否 end if; select SQ_BM_JKRZ00_JKRZID.NEXTVAL into LS_JKRZID from dual;--日志表ID LS_JKQQLX:='pro';--接口请求类型 LS_FUNCBM:='SP_PAY_YJJ_ZHTK';--接口编码 LS_FUNCMC:='统一支付平台预交金账户退款';--接口方法 LS_JKQQCS:=null;--接口请求参数 LS_JKFHCS:=null;--返回参数值 LS_BYCS01:=substrb(IN_NOTES,1,2000);--备用参数1 LS_BYCS02:=substrb(IN_POSTRANS,1,2000);--备用参数2 LS_BYCS03:=null;--备用参数3 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('operetorid',IN_OPERETORID,0,0,null,null),1,4000); --操作员编号 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('operetorname',IN_OPERETORNAME,0,0,null,null),1,4000); --操作员姓名 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('termno',IN_TERMNO,0,0,null,null),1,4000); --终端编号 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('cardtype',IN_CARDTYPE,0,0,null,null),1,4000); --卡类型 01:社保卡 02:市民健康卡 03:院内就诊卡 04:身份证 05:住院号 06:临时卡 07:腕带编码 08:病案号加身份证 09:住ID 10:病人ID LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('cardno',IN_CARDNO,0,0,null,null),1,4000); --卡号 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('accounttype',IN_ACCOUNTTYPE,0,0,null,null),1,4000); --帐户类型 01:门诊预交金账户 02:住院预交金账户 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('idno',IN_IDNO,0,0,null,null),1,4000); --身份证号 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('withdrawtype',IN_WITHDRAWTYPE,0,0,null,null),1,4000); --转出类型 01 现金 02 POS刷卡 03 单位转账 04 支付宝 05 微信支付 06 健康通支付 07 离线POS 08:建行龙支付 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('amount',IN_AMOUNT,0,0,null,null),1,4000); --充值金额 保留两位小数 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('outrechargeno',IN_OUTRECHARGENO,0,0,null,null),1,4000); --外部充值交易流水号 HIS或自助机 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('rechargeno',IN_RECHARGENO,0,0,null,null),1,4000); --支付平台充值流水号 支付平台业务流水号 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('externalno',IN_EXTERNALNO,0,0,null,null),1,4000); --支付渠道流水号 支付宝、微信等平台流水号 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('tkjylx',IN_TKJYLX,0,0,null,null),1,4000); --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('postrans',IN_POSTRANS,0,0,null,null),1,4000); --POS刷卡信息 JSON格式字符串 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('notes',IN_NOTES,0,0,null,null),1,4000); --备注信息 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('zffsbh',LS_PTZFBH,0,0,null,null),1,4000); --zffsbh LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('zffsmc',LS_PTZFMC,0,0,null,null),1,4000); --zffsmc LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('ptlsh0',trim(IN_RECHARGENO),0,0,null,null),1,4000); --ptlsh0 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('qdlsh0',trim(IN_EXTERNALNO),0,0,null,null),1,4000); --qdlsh0 LS_JKQQCS:=substrb(LS_JKQQCS||SF_XT_XMLJSON('czlx00',trim(IN_WITHDRAWTYPE),0,0,null,null),1,4000); --czlx00 LS_JKQQCS:=substrb(SF_XT_XMLJSON('input',LS_JKQQCS,0,0,null,null),1,4000); --input --插入BM_JKRZ00 insert into BM_JKRZ00(JKRZID,CJBM00,ZDBH00,CARDNO,MZZYBZ,ZXZT00,BRID00,CZRQ00,CZSJ00, FUNCBM,FUNCMC,JKQQLX,JKQQCS,FHRQ00,FHSJ00,JKFHCS,BYCS01,BYCS02, BYCS03,CZY000,CZYXM0,DDLSH0) select LS_JKRZID,'YHPAY',substrb(IN_TERMNO,1,50),substrb(IN_CARDNO,1,50),LS_MZZYBZ,'0',0,LS_CZRQ00,LS_CZSJ00, LS_FUNCBM,LS_FUNCMC,substrb(LS_JKQQLX,1,20),substrb(LS_JKQQCS,1,4000),null,null,LS_JKFHCS, LS_BYCS01,LS_BYCS02,LS_BYCS03,null,null,substrb(LS_DDLSH0,1,30) from dual; --先把参数写入到BM_ZFPTCS insert into BM_ZFPTCS (DDLSH0,NBID00,MKLXMC,CZRQ00,CZSJ00,CZYBH0,CZYXM0,ZDBH00,JFBZ00,ZFFSBH, ZFFSMC,DJH000,CATYPE,CARDNO,ZHTYPE,BRZJBH,CZLX00,CZJE00,QDLX00,TKJYLX, PTLSH0,QDLSH0,YHSKXX,NOTES0) values (IN_OUTRECHARGENO,SQ_BM_ZFPTCS_NBID00.nextval,LS_MKLXMC,LS_CZRQ00,LS_CZSJ00,IN_OPERETORID,IN_OPERETORNAME,IN_TERMNO,LS_JFBZ00,LS_PTZFBH, LS_PTZFMC,LS_JFDJH0,IN_CARDTYPE,IN_CARDNO,IN_ACCOUNTTYPE,IN_IDNO,IN_WITHDRAWTYPE,IN_AMOUNT,'01',LS_TKJYLX, IN_RECHARGENO,IN_EXTERNALNO,IN_POSTRANS,IN_NOTES); --先提交事务 if LS_SFTJSW='Y' then commit; end if; --2020.05.21 解析19:ippid、20:IPPname、21:银行编码 --begin-- if trim(IN_POSTRANS) is not null then begin LS_APPBM0:=substrb(SF_SF_RETURNINDEXEH(trim(IN_POSTRANS),'|', 19),1,40);--App 编码 LS_APPMC0:=substrb(SF_SF_RETURNINDEXEH(trim(IN_POSTRANS),'|', 20),1,30);--App名称 LS_APPYH0:=substrb(SF_SF_RETURNINDEXEH(trim(IN_POSTRANS),'|', 21),1,30);--App银行 exception when others then LS_APPBM0:=null;--App 编码 LS_APPMC0:=null;--App名称 LS_APPYH0:=null;--App银行 end; end if; --2020.05.21 解析19:ippid、20:IPPname、21:银行编码 --end-- --退款交易类型是否正确 if LS_TKJYLX not in ('01','02','03','04') then OUT_RETCODE:='04'; OUT_RETMSG:='退款交易类型入参错误(01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常):'||LS_TKJYLX; rollback; return; end if; /* --请求报文: "traceNo": "202107231447272434", "outChargeNo": "WX_MIN1627022966443",=IN_outrechargeno "outRefundNo": "MZ202107231519500376",=IN_rechargeno=his退款的单据号 IN_outrechargeno 外部充值交易流水号 HIS或自助机(退款交易类型为02,03,04 传his原订单号) IN_rechargeno 支付平台充值流水号 支付平台业务流水号 IN_externalno 支付渠道流水号 支付宝、微信等平台流水号 LS_DDLSH0:=IN_outrechargeno;--订单流水号(外部充值交易流水号 HIS或自助机) LS_JYLSH0:=IN_rechargeno;--交易流水号(支付平台充值流水号 支付平台业务流水号) LS_YKTSH0:=IN_externalno;--(支付渠道流水号 支付宝、微信等平台流水号) DDLSH0=IN_outrechargeno=WX_MIN1627022966443,PTLSH0=IN_rechargeno=MZ202107231519500376 ,QDLSH0=IN_externalno */ --2021.07.23 select count(1)into LS_COUNT1 from BM_ZFRZ00 where DDLSH0=IN_outrechargeno and JFBZ00='1' and MZZYBZ=LS_MZZYBZ; if nvl(LS_COUNT1,0)>0 then LS_DDLSH0:=IN_outrechargeno;--订单流水号(外部充值交易流水号 HIS或自助机) LS_JYLSH0:=IN_rechargeno;--交易流水号(支付平台充值流水号 支付平台业务流水号) LS_YKTSH0:=IN_externalno;--(支付渠道流水号 支付宝、微信等平台流水号) else LS_DDLSH0:=IN_rechargeno;--订单流水号(外部充值交易流水号 HIS或自助机) LS_JYLSH0:=IN_outrechargeno;--交易流水号(支付平台充值流水号 支付平台业务流水号) LS_YKTSH0:=IN_externalno;--(支付渠道流水号 支付宝、微信等平台流水号) end if; --查找his本地记录 select count(1)into LS_COUNT1 from BM_ZFRZ00 where DDLSH0=LS_DDLSH0 and JFBZ00='1' and MZZYBZ=LS_MZZYBZ; if LS_COUNT1<=0 then OUT_RETCODE:='04'; OUT_RETMSG:='预交金账户退款接口失败!未找到有效的订单号:'||LS_DDLSH0; rollback; return; end if; --查找his订单信息 select * into RZFRZ from BM_ZFRZ00 where DDLSH0=LS_DDLSH0; LS_ZFFSBH:=RZFRZ.ZFFS00; LS_INQTCS:=RZFRZ.INQTCS; LS_TKDDH0:=RZFRZ.TKDDH0; LS_BRID00:=RZFRZ.BRID00; LS_ZYID00:=RZFRZ.ZYGHID; LS_ZYH000:=RZFRZ.ZYHGHH; LS_JKLXBH:=RZFRZ.JKLXBH; if LS_ZFFSBH=1 then --现金 LS_XJJE00:=LS_JYJE00;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=0;--银行卡金额 LS_TKJYLX:='01'; --01:正常退款 elsif LS_ZFFSBH=8 then --银行卡 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 select SF_SF_RETURNINDEXEH(trim(LS_INQTCS),'|', 2) into LS_ZPKHYH from dual; select SF_SF_RETURNINDEXEH(trim(LS_INQTCS),'|', 3) into LS_ZPDWMC from dual; select SF_SF_RETURNINDEXEH(trim(LS_INQTCS),'|', 4) into LS_ZPH000 from dual; elsif LS_ZFFSBH=2 then --转账 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=LS_JYJE00;--转账金额 LS_YHKJE0:=0;--银行卡金额 LS_TKJYLX:='01'; --01:正常退款 select SF_SF_RETURNINDEXEH(trim(LS_INQTCS),'|', 2) into LS_ZPKHYH from dual; select SF_SF_RETURNINDEXEH(trim(LS_INQTCS),'|', 3) into LS_ZPDWMC from dual; select SF_SF_RETURNINDEXEH(trim(LS_INQTCS),'|', 4) into LS_ZPH000 from dual; elsif LS_ZFFSBH=25 then --支付宝 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 elsif LS_ZFFSBH=24 then --微信 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 elsif LS_ZFFSBH=26 then --健康通 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 elsif LS_ZFFSBH=28 then --电子支付(聚合支付) LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 else LS_XJJE00:=LS_JYJE00;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=0;--银行卡金额 end if; --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_JGBM00:=trim(LS_TKJYLX); if trim(LS_JGBM00)='01' then --机构名称 LS_JGMC00:='正常退款'; elsif trim(LS_JGBM00)='02' then LS_JGMC00:='退款冲正'; elsif trim(LS_JGBM00)='03' then LS_JGMC00:='支付平台退款成功'; elsif trim(LS_JGBM00)='04' then LS_JGMC00:='支付平台退款异常'; else LS_JGMC00:=''; end if; LS_JYLXMC:=substrb(trim(IN_TKJYLX)||'|'||trim(LS_JGMC00)||'|'||trim(LS_CZLXBM)||'|'||trim(LS_CZLXMC),1,50);--交易类型名称 begin select ZFFSMC into LS_ZFFSMC from BM_BRZFFS where ZFFSBH=LS_ZFFSBH; exception when others then OUT_RETCODE:='01'; OUT_RETMSG:='表(BM_BRZFFS)未找到有效的记录!ZFFSBH='||LS_ZFFSBH; rollback; return; end; /* if LS_JYJE00=0 then OUT_RETCODE:='99'; OUT_RETMSG:='入参充值金额传入有误!'||IN_AMOUNT; rollback; return; end if; */ begin select A.YGBH00,A.ZWXM00,A.BMBH00 into LS_YGBH00,LS_YGXM00,LS_CZYKS0 from BM_YGBM00 A where A.YGBH00=trim(IN_OPERETORID); exception when others then OUT_RETCODE:='01'; OUT_RETMSG:='未找到有效的员工信息!'; rollback; return; end; if (nvl(LS_YGBH00,0) in (0)) or (LS_YGBH00 is null) then OUT_RETCODE:='01'; OUT_RETMSG:='未找到有效的员工编码或姓名!'; rollback; return; end if; --门诊业务处理--begin-- -- if (IN_ACCOUNTTYPE in ('01') then --01门诊预交金账户 02 住院预交金账户 if LS_MZZYBZ='0' then --门诊住院标志 0:门诊 1:住院 begin select trim(value0) into LS_YJJPJ0 from XT_XTCS00 where name00 = 'SF_YJJPJ0'; exception when others then LS_YJJPJ0:='N'; end; begin select trim(value0) into LS_PLBHCS from XT_XTCS00 where name00 = 'SF_YJJTKPJLX'; exception when others then LS_PLBHCS:='Y'; end; if (trim(LS_YJJPJ0)='Y') and (trim(LS_PLBHCS)='Y') then LS_PJLXBM:=7; else LS_PJLXBM:=2; end if; if LS_BRID00=0 then select SF_PAY_BRZYID(IN_CARDTYPE,IN_CARDNO,IN_ACCOUNTTYPE,LS_ZFQDBM) into LS_BRID00 from dual; end if; if LS_BRID00=0 then OUT_RETCODE:='01'; OUT_RETMSG:='未找到有效的病人基本信息!'; rollback; return; end if; --执行BM_BRXXB0 begin select * into RBRXX from BM_BRXXB0 A where A.BRID00=LS_BRID00; exception when others then OUT_RETCODE:='02'; OUT_RETMSG:='查找BM_BRXXB0异常!'; rollback; return; end; --执行余额 --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(0,LS_BRID00,1,0) into LS_ZHYE00 from dual; --01:正常退款,并且出院结算院内先退款--begin--- IF LS_JKLXBH in (43,53) and LS_TKJYLX in ('01') THEN update BM_ZFRZ00 set ZXZTBZ='1' where DDLSH0=LS_DDLSH0 and ZXZTBZ='0'; --状态标志 0:失败 1:成功 2:支付平台退款成功 3:支付平台退款异常 OUT_RETCODE:='00';--返回码 00成功 OUT_RETMSG:='';--返回说明 OUT_BALANCE:=nvl(LS_ZHYE00,0);--余额 OUT_TRACETIME:=LS_CZRQ00||substrb(LS_CZSJ00,1,2)||substrb(LS_CZSJ00,4,2)||substrb(LS_CZSJ00,7,2);--交易成功时间 yyyyMMddHHmmss OUT_TRACENO:=LS_DDLSH0;--LS_DJH000;--HIS处理业务流水号 return; end if; --01:正常退款,并且出院结算院内先退款--end--- if LS_TKJYLX in ('01') then --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 --判断是否已经充值过程 交易流水号(支付平台充值流水号 支付平台业务流水号) select count(1)into LS_COUNT0 from SF_BRJFB0 where BRID00=LS_BRID00 and JYLSH0=LS_JYLSH0; if LS_COUNT0>=1 and nvl(IN_TKJYLX,'-1') not in ('03') then OUT_RETCODE:='03'; OUT_RETMSG:='预交金退款失败,错误原因:该笔交易流水号:'||LS_JYLSH0||'HIS内部已经退款成功,无法重复正常退款!'; rollback; return; end if; --获取对应收费员的票据序号-- --zhangyc 2018.04.12 退款判断是取预交金收款票据 7:门诊预交金票据 2:门诊预交金退款票据 if (trim(LS_YJJPJ0)='Y') then LS_PLBH00:=7; else LS_PLBH00:=2; end if; begin select PJDQH0,PJLYID into LS_PJXH00,LS_PJLYID from BM_PJLYQK where PJLXBM = LS_PLBH00 and SYBZ00='Y' and PJSYR0=LS_YGBH00; exception when others then LS_PJXH00:='0'; LS_PJLYID:=0; end; select SQ_SF_BRJFB0_DJH000.nextval into LS_DJH000 from dual; select SQ_SF_PJSYQK_PJH000.nextval into LS_PJH000 from dual; --插入SF_BRJFB0 insert into SF_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPDWMC,ZPZH00,ZPKHYH,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,WBHLID,WBHLJE,CZYKS0, JYLSH0,YKTSH0,JYLXMC,JGBM00,JGMC00,DDLSH0,ZFMXBH,SHH000,APPBM0,APPMC0,APPYH0) values(LS_DJH000,RBRXX.BRID00,1,LS_JYJE00,LS_ZFFSBH,LS_ZFFSMC,LS_ZPH000,LS_ZPDWMC,LS_ZPZH00,LS_ZPKHYH,LS_PJH000, LS_CZRQ00,LS_CZSJ00,LS_YGBH00,LS_YGXM00,0,LS_JFBZ00,0,0,1,LS_JYJE00,LS_CZYKS0, LS_JYLSH0,LS_YKTSH0,LS_JYLXMC,LS_JGBM00,LS_JGMC00,LS_DDLSH0,LS_ZFMXBH,LS_SHH000,LS_APPBM0,LS_APPMC0,LS_APPYH0); --插入SF_PJSYQK insert into SF_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0, DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,BRID00,DZQBJE,CZYKS0,PJLYID,PHLYXZ) select LS_PJH000,PLBH00,PLMC00,LS_PJXH00,LS_XJJE00,LS_ZZJE00,LS_YHKJE0,LS_YGBH00,LS_YGXM00, LS_CZRQ00,LS_CZSJ00,'Y','0',RBRXX.BRXM00,RBRXX.BRXB00,RBRXX.BRID00,0,LS_CZYKS0,LS_PJLYID,LS_PHLYXZ from BM_PJLXB0 where PLBH00 = LS_PJLXBM ; if (LS_ZFFSBH=8) and (trim(IN_POSTRANS) is not null) then --银行卡 SP_SF_PAY_POSLSZ(LS_DDLSH0,LS_MZZYBZ,LS_JFBZ00,LS_ZFFSBH,RBRXX.BRID00,RBRXX.BRXM00,0,null, LS_YGBH00,LS_YGXM00,LS_CZYKS0,LS_DJH000,LS_JYJE00,trim(IN_POSTRANS),null, 'YHPAY',LS_ZXZT00,LS_ERRMSG); if LS_ZXZT00='0' then --执行状态 0:失败 1:成功 OUT_RETCODE:='03'; OUT_RETMSG:=LS_ERRMSG; rollback; return; end if; end if; --执行余额 --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(0,LS_BRID00,1,0) into LS_ZHYE00 from dual; --判断账户余额是否足够 if LS_ZHYE00<0 then OUT_RETCODE:='04'; OUT_RETMSG:='该病人门诊账户余额不足,无法退款!'; rollback; return; end if; --修改BM_ZFRZ00 update BM_ZFRZ00 set ZFFS00=LS_ZFFSBH, ZFFSMC=LS_ZFFSMC, DJH000=LS_DJH000, JFJE00=LS_JYJE00, JFRQ00=LS_CZRQ00, JFSJ00=LS_CZSJ00, ZXZTBZ='1',--状态标志 0:失败 1:成功 BRYE00=LS_ZHYE00, PTDDH0=IN_EXTERNALNO,--支付渠道流水号 支付宝、微信等平台流水号 ZFQD00=IN_WITHDRAWTYPE,--支付渠道=tradeMode JYCGSJ=to_char(sysdate,'YYYYMMDD')||to_char(sysdate,'HH24MIss'), PTGZH0=IN_RECHARGENO,--支付平台跟踪号=traceNo JYLSH0=LS_JYLSH0,--交易流水号 YKTSH0=LS_YKTSH0,--健康通流水号 JYLXMC=LS_JYLXMC,--交易类型名称 JGBM00=LS_JGBM00,--机构编码 JGMC00=LS_JGMC00, --机构名称 BZ0000=LS_BZ0000, YHJYXX=IN_POSTRANS, TKJYLX=LS_TKJYLX, --退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 PJXH00=LS_PJXH00, ZPKHYH=LS_ZPKHYH, ZPDWMC=LS_ZPDWMC, ZPH000=LS_ZPH000, ZFQDBM=LS_ZFQDBM where DDLSH0=LS_DDLSH0; if LS_TKDDH0 is not null then update BM_ZFRZ00 set TKJE00=nvl(TKJE00,0)+LS_JYJE00 where DDLSH0=LS_TKDDH0 and BRID00=LS_BRID00; end if; --缴费表记录现金退款 SP_PAY_JFBJRXJTK(LS_BRID00,LS_JYJE00,LS_ZFFSBH,'0','1',LS_ZXZTTK,OUT_RETMSG); if LS_ZXZTTK <>1 then rollback; return; end if; update BM_ZFPTCS set DJH000=LS_DJH000 where DDLSH0=LS_DDLSH0; --修改BM_JKRZ00 update BM_JKRZ00 Set ZXZT00='1' ,--状态标志 0:失败 1:成功 FHRQ00=to_char(sysdate,'YYYYMMDD') ,--返回操作日期 FHSJ00=to_char(sysdate,'HH24MIss') ,--返回操作时间 JKFHCS=substrb(LS_JKFHCS,1,4000) ,--返回参数值 BRID00=LS_BRID00 ,--病人ID DJH000=LS_DJH000 ,--单据号 ZYID00=LS_ZYID00 ,--住院ID CZY000=LS_YGBH00 ,--操作员编码 CZYXM0=substrb(LS_YGXM00,1,50) ,--操作员姓名 DDLSH0=substrb(LS_DDLSH0,1,30) --订单流水号 where JKRZID=LS_JKRZID; elsif LS_TKJYLX in ('02') then --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_PJLXBM:=7; LS_JFBZ00:='0';--交费备注 '0'交 1:退 LS_JYJE00:=abs(RZFRZ.JFJE00); select SF_SF_PAY_DDLSH0('','0',LS_JFBZ00) into LS_DDLSH0_NEW from dual; --获取自助机对应收费员的票据序号-- begin select PJDQH0,PJLYID into LS_PJXH00,LS_PJLYID from BM_PJLYQK where PJLXBM = LS_PJLXBM and SYBZ00='Y' and PJSYR0=LS_YGBH00; exception when others then LS_PJXH00:='0'; LS_PJLYID:=0; end; begin select JYLSH0,YKTSH0 into LS_JYLSH0,LS_YKTSH0 from BM_ZFRZ00 where DDLSH0=LS_TKDDH0; exception when others then LS_JYLSH0:=IN_RECHARGENO; LS_YKTSH0:=IN_EXTERNALNO; end; select SQ_SF_BRJFB0_DJH000.nextval into LS_DJH000 from dual; select SQ_SF_PJSYQK_PJH000.nextval into LS_PJH000 from dual; --插入SF_BRJFB0 insert into SF_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPDWMC,ZPZH00,ZPKHYH,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,WBHLID,WBHLJE,CZYKS0, JYLSH0,YKTSH0,JYLXMC,JGBM00,JGMC00,DDLSH0,ZFMXBH,SHH000,APPBM0,APPMC0,APPYH0) values(LS_DJH000,RBRXX.BRID00,1,LS_JYJE00,LS_ZFFSBH,LS_ZFFSMC,LS_ZPH000,LS_ZPDWMC,LS_ZPZH00,LS_ZPKHYH,LS_PJH000, LS_CZRQ00,LS_CZSJ00,LS_YGBH00,LS_YGXM00,0,0,0,0,1,LS_JYJE00,LS_CZYKS0, LS_JYLSH0,LS_YKTSH0,LS_JYLXMC,LS_JGBM00,LS_JGMC00,LS_DDLSH0_NEW,LS_ZFMXBH,LS_SHH000,LS_APPBM0,LS_APPMC0,LS_APPYH0); --插入SF_PJSYQK insert into SF_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0, DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,BRID00,DZQBJE,CZYKS0,PJLYID,PHLYXZ) select LS_PJH000,PLBH00,PLMC00,LS_PJXH00,abs(LS_XJJE00),abs(LS_ZZJE00),abs(LS_YHKJE0),LS_YGBH00,LS_YGXM00, LS_CZRQ00,LS_CZSJ00,'Y','0',RBRXX.BRXM00,RBRXX.BRXB00,RBRXX.BRID00,0,LS_CZYKS0,LS_PJLYID,LS_PHLYXZ from BM_PJLXB0 where PLBH00 = LS_PJLXBM ; if (LS_ZFFSBH=8) and (trim(IN_POSTRANS) is not null) then --银行卡 SP_SF_PAY_POSLSZ(LS_DDLSH0,LS_MZZYBZ,0,LS_ZFFSBH,RBRXX.BRID00,RBRXX.BRXM00,0,null, LS_YGBH00,LS_YGXM00,LS_CZYKS0,LS_DJH000,LS_JYJE00,trim(IN_POSTRANS),null, 'YHPAY',LS_ZXZT00,LS_ERRMSG); if LS_ZXZT00='0' then --执行状态 0:失败 1:成功 OUT_RETCODE:='03'; OUT_RETMSG:=LS_ERRMSG; rollback; return; end if; end if; --插入日志主表 insert into BM_ZFRZ00 ( DDLSH0,--订单流水号 CZRQ00,--操作日期 CZSJ00,--操作时间 CZY000,--操作员编码 CZYXM0,--操作员姓名 JKLXBH,--接口类型编号 0:设置服务 1:查询预交金 2:预交金充值 3:预交金退款 4:查询交易结果 JKLXMC,--接口类型名称 ZDBH00,--终端编号(自助机) BRID00,--病人ID BRXM00,--病人姓名 BRXB00,--病人性别 YBKH00,--医保卡号 YBID00,--医保ID ICKH00,--IC卡号 BRZJBH,--证件编号 BRDH00,--病人电话 MZZYBZ,--门诊住院标志 0:门诊 1:住院 JFBZ00,--缴费备注0:交,1:退 ZYGHID,--住院(ZYID00)或门诊(GHID000)流水号 ZYHGHH,--住院(ZYH000)或门诊(GHH000)号 JZDH00,--结账单号 YJDH00,--医技单号 ZFFS00,--支付编码 ZFFSMC,--支付方式名称 DJH000,--单据流水号=SF_BRJFB0.DJH000 JFJE00,--缴费金额 JFRQ00,--缴费日期 JFSJ00,--缴费时间 ZXZTBZ,--状态标志 0:失败 1:成功 BRYE00,--病人余额 BZ0000,--备注信息 PTDDH0,--支付平台充值订单号=chargeNo,退款订单号=refundNo TKDDH0,--商户退款订单号=outRefundNo ZFQD00,--支付渠道=tradeMode JYCGSJ,--交易成功时间(yyyyMMddHHmmss)=traceTime PTGZH0,--支付平台跟踪号=traceNo JKXYBM,--响应编码=respCode JKXYXX,--响应信息=respMsg JYLSH0,--交易流水号 YKTSH0,--健康通流水号 JYLXMC,--交易类型名称 JGBM00,--机构编码 JGMC00,--机构名称 INCS00,--请求入参集合=param INQTCS,--扩展入参集合=extenalMap OUTCS0,--返回参数 YHJYXX, --银行交易信息 TKJYLX, --退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 PJXH00, ZPKHYH, ZPDWMC, ZPH000, ZFQDBM )values ( LS_DDLSH0_NEW,--订单流水号((门诊MZ 住院ZY 自助机:ZZ)+yyyyMMddHHmmss+xxxx) LS_CZRQ00,--操作日期 LS_CZSJ00,--操作时间 LS_YGBH00,--操作员编码 LS_YGXM00,--操作员姓名 '2',--接口类型编号 0:设置服务 1:查询预交金 2:预交金充值 3:预交金退款 4:查询交易结果 12:预交金充值其它渠道 13:预交金退款其它渠道 '预交金冲正',--接口类型名称 IN_TERMNO,--终端编号(自助机) RBRXX.BRID00,--病人ID trim(RBRXX.BRXM00),--病人姓名 RBRXX.BRXB00,--病人性别 trim(RBRXX.YBKH00),--医保卡号 trim(RBRXX.YBID00),--医保ID trim(IN_CARDNO),--IC卡号 trim(RBRXX.BRZJBH),--证件编号 trim(RBRXX.BRDH00),--病人电话 '0',--门诊住院标志 0:门诊 1:住院 LS_JFBZ00,--缴费备注0:交,1:退 0,--住院(ZYID00)或门诊(GHID000)流水号 null,--住院(ZYH000)或门诊(GHH000)号 0,--结账单号 0,--医技单号 LS_ZFFSBH,--支付编码 LS_ZFFSMC,--支付方式名称 LS_DJH000,--单据流水号=SF_BRJFB0.DJH000 LS_JYJE00,--缴费金额 LS_CZRQ00,--缴费日期 LS_CZSJ00,--缴费时间 '1',--状态标志 0:失败 1:成功 LS_ZHYE00,--病人余额 LS_BZ0000,--备注信息 IN_EXTERNALNO,--支付平台充值订单号=chargeNo,退款订单号=refundNo LS_DDLSH0,--商户退款订单号=outRefundNo null,--支付渠道=tradeMode null,--交易成功时间(yyyyMMddHHmmss)=traceTime IN_RECHARGENO,--支付平台跟踪号=traceNo '000000',--响应编码=respCode '退款冲正',--响应信息=respMsg LS_JYLSH0,--交易流水号 LS_YKTSH0,--健康通流水号 LS_JYLXMC,--交易类型名称 LS_JGBM00,--机构编码 LS_JGMC00,--机构名称 null,--请求入参集合=param null,--扩展入参集合=extenalMap null,--返回参数 IN_POSTRANS,--扩展入参集合=extenalMap LS_TKJYLX,--退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_PJXH00, LS_ZPKHYH, LS_ZPDWMC, LS_ZPH000, LS_ZFQDBM ); update BM_ZFRZ00 set JKXYBM='000000',JKXYXX='退款冲正' where DDLSH0=LS_DDLSH0; LS_DDLSH0:=LS_DDLSH0_NEW; elsif LS_TKJYLX in ('03') then --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 update BM_ZFRZ00 set ZXZTBZ='2',--状态标志 0:失败 1:成功 2:支付平台退款成功 3:支付平台退款异常 JKXYBM='000000', JKXYXX='支付平台退款成功', JGBM00='03', JGMC00='支付平台退款成功', INQTCS=LS_BZ0000, TKJYLX=LS_TKJYLX where DDLSH0=LS_DDLSH0 and ZXZTBZ='1'; --BM_ZFRZ00.TQTK00:支付退款状态 0:正常模式 1:交互前院内优先退款 2:结算后院内优先退款 3:结算后院内优先退款平台退款成功 4:结算后院内优先退款平台退款失败 update BM_ZFRZ00 set TQTK00='3' where DDLSH0=LS_DDLSH0 and TQTK00='2'; elsif LS_TKJYLX in ('04') then --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 update BM_ZFRZ00 set ZXZTBZ='3',--状态标志 0:失败 1:成功 2:支付平台退款成功 3:支付平台退款异常 JKXYXX='支付平台退款异常', INQTCS=LS_BZ0000, TKJYLX=LS_TKJYLX where DDLSH0=LS_DDLSH0 and ZXZTBZ='1'; --BM_ZFRZ00.TQTK00:支付退款状态 0:正常模式 1:交互前院内优先退款 2:结算后院内优先退款 3:结算后院内优先退款平台退款成功 4:结算后院内优先退款平台退款失败 update BM_ZFRZ00 set TQTK00='4' where DDLSH0=LS_DDLSH0 and TQTK00='2'; else OUT_RETCODE:='99'; OUT_RETMSG:='异常错误请核对入参退款交易类型是否正确:'||LS_TKJYLX; rollback; return; end if; --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(0,LS_BRID00,1,0) into LS_ZHYE00 from dual; --判断账户余额是否足够 if LS_ZHYE00<0 then OUT_RETCODE:='04'; OUT_RETMSG:='该病人门诊账户余额不足,无法退款!'; rollback; return; else OUT_RETCODE:='00';--返回码 00成功 OUT_RETMSG:='';--返回说明 OUT_BALANCE:=nvl(LS_ZHYE00,0);--余额 OUT_TRACETIME:=LS_CZRQ00||substrb(LS_CZSJ00,1,2)||substrb(LS_CZSJ00,4,2)||substrb(LS_CZSJ00,7,2);--交易成功时间 yyyyMMddHHmmss OUT_TRACENO:=LS_DDLSH0;--LS_DJH000;--HIS处理业务流水号 LS_JKFHCS:=substrb(LS_JKFHCS||SF_XT_XMLJSON('retcode',OUT_RETCODE,0,0,null,null),1,4000); LS_JKFHCS:=substrb(LS_JKFHCS||SF_XT_XMLJSON('retmsg',OUT_RETMSG,0,0,null,null),1,4000); LS_JKFHCS:=substrb(LS_JKFHCS||SF_XT_XMLJSON('tracetime',OUT_TRACETIME,0,0,null,null),1,4000); LS_JKFHCS:=substrb(LS_JKFHCS||SF_XT_XMLJSON('traceno',OUT_TRACENO,0,0,null,null),1,4000); LS_JKFHCS:=substrb(SF_XT_XMLJSON('output',LS_JKFHCS,0,0,null,null),1,4000); --修改BM_JKRZ00 update BM_JKRZ00 Set ZXZT00='1' ,--状态标志 0:失败 1:成功 FHRQ00=to_char(sysdate,'YYYYMMDD') ,--返回操作日期 FHSJ00=to_char(sysdate,'HH24MIss') ,--返回操作时间 JKFHCS=substrb(LS_JKFHCS,1,4000) ,--返回参数值 BRID00=LS_BRID00 ,--病人ID DJH000=LS_DJH000 ,--单据号 ZYID00=LS_ZYID00 ,--住院ID CZY000=LS_YGBH00 ,--操作员编码 CZYXM0=substrb(LS_YGXM00,1,50) ,--操作员姓名 DDLSH0=substrb(LS_DDLSH0,1,30) --订单流水号 where JKRZID=LS_JKRZID; end if; end if; --门诊业务处理--end-- -----------------------住院业务处理-------------begin------------------- --if IN_ACCOUNTTYPE in ('02') then --01门诊预交金账户 02 住院预交金账户 if LS_MZZYBZ='1' then --门诊住院标志 0:门诊 1:住院 --LS_JYLXMC:=substrb(LS_JYLXMC||IN_NOTES,1,50); LS_JFLBID:=2; begin select trim(value0) into LS_YJJPJ0 from XT_XTCS00 where name00 = 'ZY_YJJPJ0'; exception when others then LS_YJJPJ0:='N'; end; if LS_JFBZ00='0' then --缴费备注 0:交 1:退 LS_PJLXBM:=8; else --1:退 if trim(LS_YJJPJ0)='Y' then LS_PJLXBM:=8; else LS_PJLXBM:=4; end if; end if; if LS_ZYID00=0 then select SF_PAY_BRZYID(IN_CARDTYPE,IN_CARDNO,IN_ACCOUNTTYPE,LS_ZFQDBM) into LS_ZYID00 from dual; end if; if LS_ZYID00=0 then OUT_RETCODE:='01'; OUT_RETMSG:='未找到有效的病人基本信息!'; rollback; return; end if; --查找住院信息表 begin select * into RZYXX from ZY_BRXXB0 where ZYID00=LS_ZYID00; exception when others then OUT_RETCODE:='02'; OUT_RETMSG:='查找ZY_BRXXB0异常!'; rollback; return; end; LS_BRID00:=RZYXX.BRID00; LS_ZYH000:=RZYXX.ZYH000; --执行BM_BRXXB0 begin select * into RBRXX from BM_BRXXB0 A where A.BRID00=LS_BRID00; exception when others then OUT_RETCODE:='02'; OUT_RETMSG:='查找BM_BRXXB0异常!'; rollback; return; end; --21:入院登记充值 22:预交金充值 23:出院结算充值 24:重新结算充值 --31:取消入院退款 32:预交金退款 33:出院结算退款 34:重新结算退款 LS_JGBM00:=LS_JKLXBH; if LS_JKLXBH='21' then LS_JGMC00:='入院登记充值'; elsif LS_JKLXBH='22' then LS_JGMC00:='预交金充值'; elsif LS_JKLXBH='23' then LS_JGMC00:='出院结算充值'; elsif LS_JKLXBH='24' then LS_JGMC00:='重新结算充值'; elsif LS_JKLXBH='31' then LS_JGMC00:='取消入院退款'; elsif LS_JKLXBH='32' then LS_JGMC00:='预交金退款'; elsif LS_JKLXBH='33' then LS_JGMC00:='出院结算退款'; elsif LS_JKLXBH='34' then LS_JGMC00:='重新结算退款'; end if; --执行余额 --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(1,LS_BRID00,2,0) into LS_ZHYE00 from dual; --01:正常退款,并且出院结算院内先退款--begin--- IF LS_JKLXBH in (43,53) and LS_TKJYLX in ('01') then update BM_ZFRZ00 set ZXZTBZ='1' where DDLSH0=LS_DDLSH0 and ZXZTBZ='0'; --状态标志 0:失败 1:成功 2:支付平台退款成功 3:支付平台退款异常 OUT_RETCODE:='00';--返回码 00成功 OUT_RETMSG:='';--返回说明 OUT_BALANCE:=nvl(LS_ZHYE00,0);--余额 OUT_TRACETIME:=LS_CZRQ00||substrb(LS_CZSJ00,1,2)||substrb(LS_CZSJ00,4,2)||substrb(LS_CZSJ00,7,2);--交易成功时间 yyyyMMddHHmmss OUT_TRACENO:=LS_DDLSH0;--LS_DJH000;--HIS处理业务流水号 return; end if; --01:正常退款,并且出院结算院内先退款--end--- if LS_TKJYLX in ('01') then --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 --判断是否已经充值过程 交易流水号(支付平台充值流水号 支付平台业务流水号) select count(1)into LS_COUNT1 from ZY_BRJFB0 where BRID00=LS_BRID00 and JYLSH0=LS_JYLSH0; if LS_COUNT1>=1 and nvl(IN_TKJYLX,'-1') not in ('03') then OUT_RETCODE:='03'; OUT_RETMSG:='预交金退款失败,错误原因:该笔交易流水号:'||LS_JYLSH0||'HIS内部已经退款成功,无法重复正常退款!'; rollback; return; end if; --获取自助机对应收费员的票据序号-- begin select PJDQH0,PJLYID into LS_PJXH00,LS_PJLYID from BM_PJLYQK where PJLXBM = LS_PJLXBM and SYBZ00='Y' and PJSYR0=LS_YGBH00; exception when others then LS_PJXH00:='0'; LS_PJLYID:=0; end; LS_JZDH00:=RZFRZ.JZDH00; --接口类型 21:入院登记充值 22:预交金充值 23:出院结算充值 24:重新结算充值 31:取消入院退款 32:预交金退款 33:出院结算退款 34:重新结算退款 if LS_JKLXBH=32 then begin --INQTCS:原单据号|退款原因|退款人|退款时间 select to_number(SF_SF_RETURNINDEXEH(trim(RZFRZ.INQTCS),'|', 1)) into LS_DJHORD from dual; select SF_SF_RETURNINDEXEH(trim(RZFRZ.INQTCS),'|', 2) into LS_JFYY00 from dual; select SF_SF_RETURNINDEXEH(trim(RZFRZ.INQTCS),'|', 3) into LS_JFSHR0 from dual; select SF_SF_RETURNINDEXEH(trim(RZFRZ.INQTCS),'|', 4) into LS_JFSHSJ from dual; exception when others then LS_DJHORD:=0; LS_JFYY00:=null; LS_JFSHR0:=null; LS_JFSHSJ:=null; end; LS_ZPKHYH:=null; LS_ZPDWMC:=null; LS_ZPH000:=null; LS_JZDH00:=2; --参考SP_ZY_BRYJJ0_TK0000 写法 update ZY_BRJFB0 set JZDH00 =LS_JZDH00 where DJH000 = LS_DJHORD; --参考SP_ZY_BRYJJ0_TK0000 写法 elsif LS_JKLXBH=21 and RZFRZ.YJDH00>0 then --YJDH00 替换为缴费单据号 接口类型:21:入院登记充值 select count(1) into LS_COUNT0 from ZY_BRJFB0 where DJH000=RZFRZ.YJDH00; elsif LS_JKLXBH=33 and LS_ZFFSBH in (1,2) and RZFRZ.YJDH00>0 then --接口类型 33:出院结算退款 现金退款或转账退款 select count(1) into LS_COUNT0 from ZY_BRJFB0 where DJH000=RZFRZ.YJDH00; elsif LS_JKLXBH=34 and LS_ZFFSBH in (1,24,25,28) and RZFRZ.YJDH00>0 then --接口类型 33:出院结算退款 现金退款或转账退款 select count(1) into LS_COUNT0 from ZY_BRJFB0 where DJH000=RZFRZ.YJDH00; end if; if LS_JKLXBH=21 and LS_COUNT0>0 then --接口类型:21:入院登记充值 LS_DJH000:=RZFRZ.YJDH00; update ZY_BRJFB0 set JYLSH0=LS_JYLSH0,YKTSH0=LS_YKTSH0, JYLXMC=LS_JYLXMC,JGBM00=LS_JGBM00, JGMC00=LS_JGMC00,DDLSH0=LS_DDLSH0 where DJH000=LS_DJH000; elsif LS_JKLXBH=33 and LS_ZFFSBH in (1,2) and LS_COUNT0>0 then --接口类型 33:出院结算退款 现金退款或转账退款 --修改原现金退款单据号 LS_DJH000:=RZFRZ.YJDH00; update ZY_BRJFB0 set --JFJE00=LS_JYJE00, 有先执行微信或支付宝退款,在下面代码直接直接扣减 JYLSH0=LS_JYLSH0,YKTSH0=LS_YKTSH0, JYLXMC=LS_JYLXMC,JGBM00=LS_JGBM00, JGMC00=LS_JGMC00,DDLSH0=LS_DDLSH0, BRYE00=0 where DJH000=LS_DJH000; elsif LS_JKLXBH = 34 and LS_ZFFSBH in (1,24,25,28) and LS_COUNT0>0 then --修改原现金退款单据号 LS_DJH000:=RZFRZ.YJDH00; update ZY_BRJFB0 set --JFJE00=LS_JYJE00, 有先执行微信或支付宝退款,在下面代码直接直接扣减 JYLSH0=LS_JYLSH0,YKTSH0=LS_YKTSH0, JYLXMC=LS_JYLXMC,JGBM00=LS_JGBM00, JGMC00=LS_JGMC00,DDLSH0=LS_DDLSH0, BRYE00=0 where DJH000=LS_DJH000; else --参考过程SP_ZY_YKHTK0 if LS_JKLXBH in (33,34) then --接口类型 33:出院结算退款 --先查询账户余额 begin select XJYE00,ZYE000 into LS_XJYE00,LS_ZYE000 from ZY_BRZHXX where BRID00=LS_BRID00 and JFLBID=LS_JFLBID; exception when others then LS_XJYE00:=0; LS_ZYE000:=0; end; --修改原来的应退款现金金额 update ZY_BRJFB0 set JFJE00=nvl(JFJE00,0)-nvl(LS_JYJE00,0) where DJH000=RZFRZ.YJDH00 and BRID00=LS_BRID00; --修改结账表中的银行卡金额和现金余额 if LS_ZFFSBH=8 then select SF_SF_RETURNINDEXEH(trim(RZFRZ.INQTCS),'|', 1) into LS_ZPKHYH from dual; select SF_SF_RETURNINDEXEH(trim(RZFRZ.INQTCS),'|', 2) into LS_ZPH000 from dual; update ZY_JZB000 set XJYE00=nvl(XJYE00,0)-abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)-abs(nvl(LS_JYJE00,0)),YHTKJE=nvl(YHTKJE,0)+abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=LS_BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH=24 then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)-abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)-abs(nvl(LS_JYJE00,0)),WXTK00=nvl(WXTK00,0)+abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=LS_BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH=25 then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)-abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)-abs(nvl(LS_JYJE00,0)),ZFBTK0=nvl(ZFBTK0,0)+abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=LS_BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH=28 then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)-abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)-abs(nvl(LS_JYJE00,0)),DZZFJE=nvl(DZZFJE,0)+abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=LS_BRID00 and JZDH00=RZFRZ.JZDH00; else update ZY_JZB000 set XJYE00=nvl(XJYE00,0) where BRID00=LS_BRID00 and JZDH00=RZFRZ.JZDH00; end if; --SP_ZY_YKHTK0 --前台修改转账金额 if LS_ZFFSBH=2 and LS_JYJE00<>0 and RZFRZ.YJDH00=0 then LS_ZFFSBH:=5; LS_ZFFSMC:='四舍五入金额'; LS_JGMC00:='现金退转账'; begin select DJH000 into LS_XJDJH0 from ZY_BRJFB0 where BRID00=LS_BRID00 and JZDH00=RZFRZ.JZDH00 and ZFFS00=1 and JFBZ00='1';--查找退现金单据号 exception when others then LS_XJDJH0:=0; end; if LS_XJDJH0>0 then LS_XJTZZ0:='Y';--是否现金退转账 Y:是 N:否 end if; end if; end if; if LS_JKLXBH in (33,34) then --接口类型 33:出院结算退款 begin select PJH000,JZRQ00,JZSJ00 into LS_PJH000,LS_JZRQ00,LS_JZSJ00 from ZY_JZB000 Where BRID00=LS_BRID00 and JZDH00=RZFRZ.JZDH00; exception when others then LS_PJH000:=0; LS_JZRQ00:=LS_CZRQ00; LS_JZSJ00:=LS_CZSJ00; end; if LS_PJH000=0 then select SQ_ZY_PJSYQK_PJH000.nextval into LS_PJH000 from dual; end if; --出院结算退款 缴费时间改为结账日期和时间 2018.01.08 LS_JFRQ00:=nvl(LS_JZRQ00,LS_CZRQ00); LS_JFSJ00:=nvl(LS_JZSJ00,LS_CZSJ00); else select SQ_ZY_PJSYQK_PJH000.nextval into LS_PJH000 from dual; LS_JFRQ00:=LS_CZRQ00; LS_JFSJ00:=LS_CZSJ00; end if; if LS_JKLXBH in (34) then LS_JFLBID := 0; end if; select SQ_ZY_BRJFB0_DJH000.nextval into LS_DJH000 from dual; --1、添加病人交费记录,对于病人余额的修改在触发器中修改 insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000,ZYID00, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,TTBRID,JFYY00,JFSHR0,JFSHSJ, JYLSH0,YKTSH0,JYLXMC,JGBM00,JGMC00,DDLSH0,ZFMXBH,SHH000,APPBM0,APPMC0,APPYH0) values(LS_DJH000,LS_BRID00,LS_JFLBID,LS_JYJE00,LS_ZFFSBH,LS_ZFFSMC,LS_ZPH000,LS_ZPKHYH,LS_ZPDWMC,LS_PJH000,LS_ZYID00, LS_JFRQ00,LS_JFSJ00,LS_YGBH00,LS_YGXM00,0,LS_JFBZ00,0,LS_JZDH00,RBRXX.TTBRID,LS_JFYY00,LS_JFSHR0,LS_JFSHSJ, LS_JYLSH0,LS_YKTSH0,LS_JYLXMC,LS_JGBM00,LS_JGMC00,LS_DDLSH0,LS_ZFMXBH,LS_SHH000,LS_APPBM0,LS_APPMC0,LS_APPYH0); if LS_JKLXBH not in (33,34) then --接口类型 33:出院结算退款(不插入ZY_PJSYQK 参考SP_ZY_YKHTK0) --插入票据表 insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,CZYKS0,PJLYID,ZYID00,PHLYXZ) select LS_PJH000,PLBH00,PLMC00,LS_PJXH00,LS_XJJE00,LS_ZZJE00,LS_YHKJE0,LS_YGBH00,LS_YGXM00, LS_JFRQ00,LS_JFSJ00,'Y','0',RBRXX.BRXM00,RBRXX.BRXB00,LS_CZYKS0,LS_PJLYID,LS_ZYID00,LS_PHLYXZ from BM_PJLXB0 where PLBH00 = LS_PJLXBM; end if; if LS_JKLXBH in (33,34) then --接口类型 33:出院结算退款 update ZY_BRZHXX set XJYE00=Ls_XJYE00,ZYE000=LS_ZYE000 where BRID00=LS_BRID00 and JFLBID=LS_JFLBID;--把账户信息修改为原来的值 update ZY_BRJFB0 set BRYE00=0 where DJH000=RZFRZ.YJDH00 and BRID00=LS_BRID00; update ZY_BRJFB0 set BRYE00=0 where DJH000=LS_DJH000 and BRID00=LS_BRID00; end if; if LS_XJTZZ0='Y' then--是否现金退转账 Y:是 N:否 --修改原来的应退款现金金额 LS_ZFFSBH:=2; LS_ZFFSMC:='转账'; update ZY_BRJFB0 set JFJE00=nvl(JFJE00,0)-nvl(LS_JYJE00,0) where DJH000=LS_XJDJH0 and BRID00=LS_BRID00; update ZY_BRJFB0 set ZFFS00=LS_ZFFSBH,ZFFSMC=LS_ZFFSMC where DJH000=LS_DJH000 and BRID00=LS_BRID00; update ZY_JZB000 set XJYE00=nvl(XJYE00,0)-abs(nvl(LS_JYJE00,0)),ZZYE00=abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)-abs(nvl(LS_JYJE00,0)) where BRID00=LS_BRID00 and JZDH00=RZFRZ.JZDH00; update ZY_BRZHXX set XJYE00=Ls_XJYE00,ZYE000=LS_ZYE000 where BRID00=LS_BRID00 and JFLBID=LS_JFLBID; end if; end if; if (LS_ZFFSBH=8) and (trim(IN_POSTRANS) is not null) then --银行卡 SP_SF_PAY_POSLSZ(LS_DDLSH0,LS_MZZYBZ,LS_JFBZ00,LS_ZFFSBH,RBRXX.BRID00,RBRXX.BRXM00,LS_ZYID00,LS_ZYH000, LS_YGBH00,LS_YGXM00,LS_CZYKS0,LS_DJH000,LS_JYJE00,trim(IN_POSTRANS),null, 'YHPAY',LS_ZXZT00,LS_ERRMSG); if LS_ZXZT00='0' then --执行状态 0:失败 1:成功 OUT_RETCODE:='03'; OUT_RETMSG:=LS_ERRMSG; rollback; return; end if; end if; --执行余额 --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(1,LS_BRID00,2,0) into LS_ZHYE00 from dual; --判断账户余额是否足够 if (LS_ZHYE00<0) and (LS_JKLXBH not in (33)) then OUT_RETCODE:='04'; OUT_RETMSG:='该病人住院账户余额不足,无法退款!'; rollback; return; end if; --修改BM_ZFRZ00 update BM_ZFRZ00 set ZFFS00=LS_ZFFSBH, ZFFSMC=LS_ZFFSMC, DJH000=LS_DJH000, JFJE00=LS_JYJE00, JFRQ00=LS_CZRQ00, JFSJ00=LS_CZSJ00, ZXZTBZ='1',--状态标志 0:失败 1:成功 BRYE00=LS_ZHYE00, PTDDH0=IN_EXTERNALNO,--支付渠道流水号 支付宝、微信等平台流水号 ZFQD00=IN_WITHDRAWTYPE,--支付渠道=tradeMode JYCGSJ=to_char(sysdate,'YYYYMMDD')||to_char(sysdate,'HH24MIss'), PTGZH0=IN_RECHARGENO,--支付平台跟踪号=traceNo JYLSH0=LS_JYLSH0,--交易流水号 YKTSH0=LS_YKTSH0,--健康通流水号 JYLXMC=LS_JYLXMC,--交易类型名称 JGBM00=LS_JGBM00,--机构编码 JGMC00=LS_JGMC00, --机构名称 BZ0000=LS_BZ0000, YHJYXX=IN_POSTRANS, TKJYLX=LS_TKJYLX, --退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 PJXH00=LS_PJXH00, ZPKHYH=LS_ZPKHYH, ZPDWMC=LS_ZPDWMC, ZPH000=LS_ZPH000, ZFQDBM=LS_ZFQDBM where DDLSH0=LS_DDLSH0 and BRID00=LS_BRID00; if LS_TKDDH0 is not null then update BM_ZFRZ00 set TKJE00=nvl(TKJE00,0)+LS_JYJE00 where DDLSH0=LS_TKDDH0 and BRID00=LS_BRID00; end if; update BM_ZFPTCS set DJH000=LS_DJH000 where DDLSH0=LS_DDLSH0; --修改BM_JKRZ00 update BM_JKRZ00 Set ZXZT00='1' ,--状态标志 0:失败 1:成功 FHRQ00=to_char(sysdate,'YYYYMMDD') ,--返回操作日期 FHSJ00=to_char(sysdate,'HH24MIss') ,--返回操作时间 JKFHCS=substrb(LS_JKFHCS,1,4000) ,--返回参数值 BRID00=LS_BRID00 ,--病人ID DJH000=LS_DJH000 ,--单据号 ZYID00=LS_ZYID00 ,--住院ID CZY000=LS_YGBH00 ,--操作员编码 CZYXM0=substrb(LS_YGXM00,1,50) ,--操作员姓名 DDLSH0=substrb(LS_DDLSH0,1,30) --订单流水号 where JKRZID=LS_JKRZID; elsif LS_TKJYLX in ('02') then --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 if (LS_JKLXBH in (33,34)) in (LS_ZFFSBH in (24,25,28)) then --接口类型 33:出院结算退款 begin select to_number(SF_SF_TYZD00('支付统一平台参数','CYTKCZFS')) into LS_CYTKCZFS from dual; exception when others then LS_CYTKCZFS:=0; end; --出院结算微信或支付宝退款冲正支付方式(1:现金 8:银行卡) 默认:1 if LS_CYTKCZFS not in (1,8) then LS_CYTKCZFS:=0; end if; if LS_CYTKCZFS in (1,8) then select ZFFSBH,ZFFSMC into LS_ZFFSBH,LS_ZFFSMC from BM_BRZFFS where ZFFSBH=LS_CYTKCZFS; end if; end if; if LS_CYTKCZFS in (1,8) then begin select JYLSH0,YKTSH0,JKXYBM,DJH000,JFJE00 into LS_JYLSH0,LS_YKTSH0,LS_JKXYBM,LS_DJH000,LS_JYJE00 from BM_ZFRZ00 where DDLSH0=LS_TKDDH0; exception when others then LS_JKXYBM:='999999'; LS_DJH000:=0; end; if nvl(LS_DJH000,0)=0 then --OUT_RETCODE:='04'; --OUT_RETMSG:='订单流水号:'||LS_TKDDH0||'在院内属于异常数据,无需冲正'; OUT_RETCODE:='00'; OUT_RETMSG:=''; rollback; return; else --直接修改原单的支付方式状态 if LS_ZFFSBH in (24) then if LS_CYTKCZFS=1 then LS_JGMC00:='退微信转现金'; else LS_JGMC00:='退微信转银行卡'; end if; end if; if LS_ZFFSBH in (25) then if LS_CYTKCZFS=1 then LS_JGMC00:='退支付宝转现金'; else LS_JGMC00:='退支付宝转银行卡'; end if; end if; if LS_ZFFSBH in (28) then if LS_CYTKCZFS=1 then LS_JGMC00:='退电子支付转现金'; else LS_JGMC00:='退电子支付转银行卡'; end if; end if; --先查询账户余额 begin select XJYE00,ZYE000 into LS_XJYE00,LS_ZYE000 from ZY_BRZHXX where BRID00=RBRXX.BRID00 and JFLBID=LS_JFLBID; exception when others then LS_XJYE00:=0; LS_ZYE000:=0; end; --修改缴费表记录 update ZY_BRJFB0 set ZFFS00=LS_ZFFSBH,ZFFSMC=LS_ZFFSMC,JGMC00=LS_JGMC00 where DJH000=LS_DJH000; --修改日志表记录 update BM_ZFRZ00 set ZFFS00=LS_ZFFSBH,ZFFSMC=LS_ZFFSMC,JGMC00=LS_JGMC00,JKXYBM='000000',JKXYXX=LS_JGMC00 where DDLSH0=LS_DDLSH0; --修改结账表 if LS_CYTKCZFS=1 then if LS_ZFFSBH in (24) then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)+abs(nvl(LS_JYJE00,0)),WXTK00=nvl(WXTK00,0)-abs(nvl(LS_JYJE00,0)) where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH in (25) then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)+abs(nvl(LS_JYJE00,0)),ZFBTK0=nvl(ZFBTK0,0)-abs(nvl(LS_JYJE00,0)) where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH in (28) then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)+abs(nvl(LS_JYJE00,0)),DZZFJE=nvl(DZZFJE,0)-abs(nvl(LS_JYJE00,0)) where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; end if; elsif LS_ZFFSBH=8 then if LS_ZFFSBH in (24) then update ZY_JZB000 set YHTKJE=nvl(YHTKJE,0)+abs(nvl(LS_JYJE00,0)),WXTK00=nvl(WXTK00,0)-abs(nvl(LS_JYJE00,0)) where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH in (25) then update ZY_JZB000 set YHTKJE=nvl(YHTKJE,0)+abs(nvl(LS_JYJE00,0)),ZFBTK0=nvl(ZFBTK0,0)-abs(nvl(LS_JYJE00,0)) where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH in (28) then update ZY_JZB000 set YHTKJE=nvl(YHTKJE,0)+abs(nvl(LS_JYJE00,0)),DZZFJE=nvl(DZZFJE,0)-abs(nvl(LS_JYJE00,0)) where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; end if; end if; --把账户信息修改为原来的值 update ZY_BRZHXX set XJYE00=LS_XJYE00,ZYE000=LS_ZYE000 where BRID00=RBRXX.BRID00 and JFLBID=LS_JFLBID; end if; select SF_SF_PAY_DDLSH0('','1','') into LS_DDLSH0_NEW from dual; LS_DDLSH0:=LS_DDLSH0_NEW; else --冲正时,微信和支付宝。修改掉原现金退款金额 LS_PJLXBM:=8; LS_JFBZ00:='0';--交费备注 '0'交 1:退 LS_JYJE00:=abs(RZFRZ.JFJE00); select SF_SF_PAY_DDLSH0('','1',LS_JFBZ00) into LS_DDLSH0_NEW from dual; --获取自助机对应收费员的票据序号-- begin select PJDQH0,PJLYID into LS_PJXH00,LS_PJLYID from BM_PJLYQK where PJLXBM = LS_PJLXBM and SYBZ00='Y' and PJSYR0=LS_YGBH00; exception when others then LS_PJXH00:='0'; LS_PJLYID:=0; end; begin select JYLSH0,YKTSH0 into LS_JYLSH0,LS_YKTSH0 from BM_ZFRZ00 where DDLSH0=LS_TKDDH0; exception when others then LS_JYLSH0:=IN_RECHARGENO; LS_YKTSH0:=IN_EXTERNALNO; end; if LS_JKLXBH in (33,34) then --接口类型 33:出院结算退款 begin select PJH000,JZRQ00,JZSJ00 into LS_PJH000,LS_JZRQ00,LS_JZSJ00 from ZY_JZB000 Where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; exception when others then LS_PJH000:=0; LS_JZRQ00:=LS_CZRQ00; LS_JZSJ00:=LS_CZSJ00; end; if LS_PJH000=0 then select SQ_ZY_PJSYQK_PJH000.nextval into LS_PJH000 from dual; end if; --出院结算退款 缴费时间改为结账日期和时间 2018.01.08 LS_JFRQ00:=nvl(LS_JZRQ00,LS_CZRQ00); LS_JFSJ00:=nvl(LS_JZSJ00,LS_CZSJ00); else select SQ_ZY_PJSYQK_PJH000.nextval into LS_PJH000 from dual; LS_JFRQ00:=LS_CZRQ00; LS_JFSJ00:=LS_CZSJ00; end if; if LS_JKLXBH in (34) then LS_JFLBID := 0; end if; select SQ_ZY_BRJFB0_DJH000.nextval into LS_DJH000 from dual; --1、添加病人交费记录,对于病人余额的修改在触发器中修改 insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000,ZYID00, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,TTBRID,JFYY00,JFSHR0,JFSHSJ, JYLSH0,YKTSH0,JYLXMC,JGBM00,JGMC00,DDLSH0,ZFMXBH,SHH000,APPBM0,APPMC0,APPYH0) values(LS_DJH000,RBRXX.BRID00,LS_JFLBID,LS_JYJE00,LS_ZFFSBH,LS_ZFFSMC,LS_ZPH000,LS_ZPKHYH,LS_ZPDWMC,LS_PJH000,LS_ZYID00, LS_JFRQ00,LS_JFSJ00,LS_YGBH00,LS_YGXM00,0,0,0,RZFRZ.JZDH00,RBRXX.TTBRID,LS_JFYY00,LS_JFSHR0,LS_JFSHSJ, LS_JYLSH0,LS_YKTSH0,LS_JYLXMC,'02',LS_JGMC00,LS_DDLSH0_NEW,LS_ZFMXBH,LS_SHH000,LS_APPBM0,LS_APPMC0,LS_APPYH0); if LS_JKLXBH not in (33,34) then --接口类型 33:出院结算退款(不插入ZY_PJSYQK 参考SP_ZY_YKHTK0) --插入票据表 insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,CZYKS0,PJLYID,ZYID00,PHLYXZ) select LS_PJH000,PLBH00,PLMC00,LS_PJXH00,abs(LS_XJJE00),abs(LS_ZZJE00),abs(LS_YHKJE0),LS_YGBH00,LS_YGXM00, LS_JFRQ00,LS_JFSJ00,'Y','0',RBRXX.BRXM00,RBRXX.BRXB00,LS_CZYKS0,LS_PJLYID,LS_ZYID00,LS_PHLYXZ from BM_PJLXB0 where PLBH00 = LS_PJLXBM; end if; if (LS_ZFFSBH=8) and (trim(IN_POSTRANS) is not null) then --银行卡 SP_SF_PAY_POSLSZ(LS_DDLSH0,LS_MZZYBZ,0,LS_ZFFSBH,RBRXX.BRID00,RBRXX.BRXM00,LS_ZYID00,LS_ZYH000, LS_YGBH00,LS_YGXM00,LS_CZYKS0,LS_DJH000,LS_JYJE00,trim(IN_POSTRANS),null, 'YHPAY',LS_ZXZT00,LS_ERRMSG); if LS_ZXZT00='0' then --执行状态 0:失败 1:成功 OUT_RETCODE:='03'; OUT_RETMSG:=LS_ERRMSG; rollback; return; end if; end if; if LS_JKLXBH in (33,34) then --接口类型 33:出院结算退款(不插入ZY_PJSYQK 参考SP_ZY_YKHTK0) --冲正时修改现金退款金额 --先查询账户余额 begin select XJYE00,ZYE000 into LS_XJYE00,LS_ZYE000 from ZY_BRZHXX where BRID00=RBRXX.BRID00 and JFLBID=LS_JFLBID; exception when others then LS_XJYE00:=0; LS_ZYE000:=0; end; if LS_ZFFSBH in (24) then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)+abs(nvl(LS_JYJE00,0)),WXTK00=nvl(WXTK00,0)-abs(nvl(LS_JYJE00,0)) where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH in (25) then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)+abs(nvl(LS_JYJE00,0)),ZFBTK0=nvl(ZFBTK0,0)-abs(nvl(LS_JYJE00,0)) where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; elsif LS_ZFFSBH in (28) then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),XJFKJE=nvl(XJFKJE,0)+abs(nvl(LS_JYJE00,0)),DZZFJE=nvl(DZZFJE,0)-abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=RBRXX.BRID00 and JZDH00=RZFRZ.JZDH00; end if; --修改原订单号的退款金额 update BM_ZFRZ00 set TKJE00=nvl(TKJE00,0)+abs(nvl(LS_JYJE00,0)) where DDLSH0=LS_TKDDH0; --修改冲正原单的 update BM_ZFRZ00 set TKJYLX='02' where DDLSH0=LS_DDLSH0; --修改原现金的退款的金额 update ZY_BRJFB0 set JFJE00=nvl(JFJE00,0)-abs(nvl(LS_JYJE00,0)) where DJH000=RZFRZ.YJDH00 and BRID00=RBRXX.BRID00; --把账户信息修改为原来的值 update ZY_BRZHXX set XJYE00=LS_XJYE00,ZYE000=LS_ZYE000 where BRID00=RBRXX.BRID00 and JFLBID=LS_JFLBID; end if; --插入日志主表 insert into BM_ZFRZ00 ( DDLSH0,--订单流水号 CZRQ00,--操作日期 CZSJ00,--操作时间 CZY000,--操作员编码 CZYXM0,--操作员姓名 JKLXBH,--接口类型编号 0:设置服务 1:查询预交金 2:预交金充值 3:预交金退款 4:查询交易结果 JKLXMC,--接口类型名称 ZDBH00,--终端编号(自助机) BRID00,--病人ID BRXM00,--病人姓名 BRXB00,--病人性别 YBKH00,--医保卡号 YBID00,--医保ID ICKH00,--IC卡号 BRZJBH,--证件编号 BRDH00,--病人电话 MZZYBZ,--门诊住院标志 0:门诊 1:住院 JFBZ00,--缴费备注0:交,1:退 ZYGHID,--住院(ZYID00)或门诊(GHID000)流水号 ZYHGHH,--住院(ZYH000)或门诊(GHH000)号 JZDH00,--结账单号 YJDH00,--医技单号 ZFFS00,--支付编码 ZFFSMC,--支付方式名称 DJH000,--单据流水号=SF_BRJFB0.DJH000 JFJE00,--缴费金额 JFRQ00,--缴费日期 JFSJ00,--缴费时间 ZXZTBZ,--状态标志 0:失败 1:成功 BRYE00,--病人余额 BZ0000,--备注信息 PTDDH0,--支付平台充值订单号=chargeNo,退款订单号=refundNo TKDDH0,--商户退款订单号=outRefundNo ZFQD00,--支付渠道=tradeMode JYCGSJ,--交易成功时间(yyyyMMddHHmmss)=traceTime PTGZH0,--支付平台跟踪号=traceNo JKXYBM,--响应编码=respCode JKXYXX,--响应信息=respMsg JYLSH0,--交易流水号 YKTSH0,--健康通流水号 JYLXMC,--交易类型名称 JGBM00,--机构编码 JGMC00,--机构名称 INCS00,--请求入参集合=param INQTCS,--扩展入参集合=extenalMap OUTCS0,--返回参数 YHJYXX, --银行交易信息 TKJYLX, --退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 PJXH00, ZPKHYH, ZPDWMC, ZPH000, ZFQDBM )values ( LS_DDLSH0_NEW,--订单流水号((门诊MZ 住院ZY 自助机:ZZ)+yyyyMMddHHmmss+xxxx) LS_CZRQ00,--操作日期 LS_CZSJ00,--操作时间 LS_YGBH00,--操作员编码 LS_YGXM00,--操作员姓名 LS_JKLXBH,--接口类型编号 0:设置服务 1:查询预交金 2:预交金充值 3:预交金退款 4:查询交易结果 12:预交金充值其它渠道 13:预交金退款其它渠道 '预交金冲正',--接口类型名称 IN_TERMNO,--终端编号(自助机) RBRXX.BRID00,--病人ID trim(RBRXX.BRXM00),--病人姓名 RBRXX.BRXB00,--病人性别 trim(RBRXX.YBKH00),--医保卡号 trim(RBRXX.YBID00),--医保ID trim(IN_CARDNO),--IC卡号 trim(RBRXX.BRZJBH),--证件编号 trim(RBRXX.BRDH00),--病人电话 '1',--门诊住院标志 0:门诊 1:住院 LS_JFBZ00,--缴费备注0:交,1:退 LS_ZYID00,--住院(ZYID00)或门诊(GHID000)流水号 LS_ZYH000,--住院(ZYH000)或门诊(GHH000)号 nvl(RZFRZ.JZDH00,0),--结账单号 nvl(RZFRZ.YJDH00,0),--医技单号 LS_ZFFSBH,--支付编码 LS_ZFFSMC,--支付方式名称 LS_DJH000,--单据流水号=SF_BRJFB0.DJH000 LS_JYJE00,--缴费金额 LS_CZRQ00,--缴费日期 LS_CZSJ00,--缴费时间 '1',--状态标志 0:失败 1:成功 LS_ZHYE00,--病人余额 LS_BZ0000,--备注信息 IN_EXTERNALNO,--支付平台充值订单号=chargeNo,退款订单号=refundNo LS_DDLSH0,--商户退款订单号=outRefundNo null,--支付渠道=tradeMode null,--交易成功时间(yyyyMMddHHmmss)=traceTime IN_RECHARGENO,--支付平台跟踪号=traceNo '000000',--响应编码=respCode '退款冲正',--响应信息=respMsg LS_JYLSH0,--交易流水号 LS_YKTSH0,--健康通流水号 LS_JYLXMC,--交易类型名称 LS_JGBM00,--机构编码 LS_JGMC00,--机构名称 null,--请求入参集合=param null,--扩展入参集合=extenalMap null,--返回参数 IN_POSTRANS,--扩展入参集合=extenalMap LS_TKJYLX,--退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_PJXH00, LS_ZPKHYH, LS_ZPDWMC, LS_ZPH000, LS_ZFQDBM ); update BM_ZFRZ00 set JKXYBM='000000',JKXYXX='退款冲正' where DDLSH0=LS_DDLSH0; LS_DDLSH0:=LS_DDLSH0_NEW; end if; elsif LS_TKJYLX in ('03') then --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 update BM_ZFRZ00 set ZXZTBZ='2',--状态标志 0:失败 1:成功 2:支付平台退款成功 3:支付平台退款异常 JKXYBM='000000', JKXYXX='支付平台退款成功', INQTCS=LS_BZ0000, TKJYLX=LS_TKJYLX where DDLSH0=LS_DDLSH0 and ZXZTBZ='1'; --BM_ZFRZ00.TQTK00:支付退款状态 0:正常模式 1:交互前院内优先退款 2:结算后院内优先退款 3:结算后院内优先退款平台退款成功 4:结算后院内优先退款平台退款失败 update BM_ZFRZ00 set TQTK00='3' where DDLSH0=LS_DDLSH0 and TQTK00='2'; elsif LS_TKJYLX in ('04') then --退款交易类型 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 update BM_ZFRZ00 set ZXZTBZ='3',--状态标志 0:失败 1:成功 2:支付平台退款成功 3:支付平台退款异常 JKXYXX='支付平台退款异常', INQTCS=LS_BZ0000, TKJYLX=LS_TKJYLX where DDLSH0=LS_DDLSH0 and ZXZTBZ='1'; --BM_ZFRZ00.TQTK00:支付退款状态 0:正常模式 1:交互前院内优先退款 2:结算后院内优先退款 3:结算后院内优先退款平台退款成功 4:结算后院内优先退款平台退款失败 update BM_ZFRZ00 set TQTK00='3' where DDLSH0=LS_DDLSH0 and TQTK00='2'; else OUT_RETCODE:='99'; OUT_RETMSG:='异常错误请核对入参退款交易类型是否正确:'||LS_TKJYLX; rollback; return; end if; --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(1,LS_BRID00,2,0) into LS_ZHYE00 from dual; --判断账户余额是否足够 if (LS_ZHYE00<0) and (LS_JKLXBH not in (33)) then OUT_RETCODE:='04'; OUT_RETMSG:='该病人住院账户余额不足,无法退款!'; rollback; return; else OUT_RETCODE:='00';--返回码 00成功 OUT_RETMSG:='';--返回说明 OUT_BALANCE:=nvl(LS_ZHYE00,0);--余额 OUT_TRACETIME:=LS_CZRQ00||substrb(LS_CZSJ00,1,2)||substrb(LS_CZSJ00,4,2)||substrb(LS_CZSJ00,7,2);--交易成功时间 yyyyMMddHHmmss OUT_TRACENO:=LS_DDLSH0;--LS_DJH000;--HIS处理业务流水号 LS_JKFHCS:=substrb(LS_JKFHCS||SF_XT_XMLJSON('retcode',OUT_RETCODE,0,0,null,null),1,4000); LS_JKFHCS:=substrb(LS_JKFHCS||SF_XT_XMLJSON('retmsg',OUT_RETMSG,0,0,null,null),1,4000); LS_JKFHCS:=substrb(LS_JKFHCS||SF_XT_XMLJSON('tracetime',OUT_TRACETIME,0,0,null,null),1,4000); LS_JKFHCS:=substrb(LS_JKFHCS||SF_XT_XMLJSON('traceno',OUT_TRACENO,0,0,null,null),1,4000); LS_JKFHCS:=substrb(SF_XT_XMLJSON('output',LS_JKFHCS,0,0,null,null),1,4000); --修改BM_JKRZ00 update BM_JKRZ00 Set ZXZT00='1' ,--状态标志 0:失败 1:成功 FHRQ00=to_char(sysdate,'YYYYMMDD') ,--返回操作日期 FHSJ00=to_char(sysdate,'HH24MIss') ,--返回操作时间 JKFHCS=substrb(LS_JKFHCS,1,4000) ,--返回参数值 BRID00=LS_BRID00 ,--病人ID DJH000=LS_DJH000 ,--单据号 ZYID00=LS_ZYID00 ,--住院ID CZY000=LS_YGBH00 ,--操作员编码 CZYXM0=substrb(LS_YGXM00,1,50) ,--操作员姓名 DDLSH0=substrb(LS_DDLSH0,1,30) --订单流水号 where JKRZID=LS_JKRZID; end if; end if; --门诊业务处理--end-- --提交事务 if OUT_RETCODE='00' then commit; else rollback; end if; exception when no_data_found then OUT_RETCODE:='99'; OUT_RETMSG:=substrb('预交金账户退款(SP_PAY_YJJ_ZHTK)错误!'||sqlerrm,1,200); rollback; when others then OUT_RETCODE:='99'; OUT_RETMSG:=substrb('预交金账户退款(SP_PAY_YJJ_ZHTK)错误!'||sqlerrm,1,200); rollback; end; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%